package controlador;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import vista.VentanaCompra;
import modelo.*;

public class ControladorVentanaCompra implements ActionListener {

	private VentanaCompra ventanaCompra;
	private CompraDAO compraDAO = new CompraDAO();
	private Compra compra = new Compra();
	private IngredienteDAO ingredienteDAO = new IngredienteDAO();
	private DetalleCompraDAO detallecompraDAO = new DetalleCompraDAO();
	private float totalcompra=0;
	private Ingrediente ingrediente = new Ingrediente();
	
	public ControladorVentanaCompra() {
		super();
		this.ventanaCompra = new VentanaCompra();
		this.ventanaCompra.setVisible(true);	
		this.ventanaCompra.addListener(this);	
		ventanaCompra.cargarComboIngrediente(ingredienteDAO.llenarComboIngrediente());
	}
	
	private void registrarCompra(){
		try
		{
		    if(ventanaCompra.getCodigo().equals("")|| 
		    		ventanaCompra.getFecha().equals("") || 
		    		ventanaCompra.getTotal().equals(""))
		    	ventanaCompra.mostrarMensaje("Debe llenar todos los datos para poder registrar una compra");
		    else
		    {
		    	String codigocompra = ventanaCompra.getCodigo();
		    	String fecha = ventanaCompra.getFecha();
		    	float total = Float.parseFloat(ventanaCompra.getTotal());
		    	int status = 1;
		    	
		    	compra = new Compra(codigocompra, fecha, total, status);
		    	compraDAO.registrarCompra(compra);
		    	
		    	int i=ventanaCompra.getDetalleCompra().getRowCount();
		    	for(int j=0; j<i;j++)
			    {
		    		DetalleCompra detallecompra = new DetalleCompra(ventanaCompra.getCodigo(), String.valueOf(ventanaCompra.getDetalleCompra().getValueAt(j, 1)), Float.parseFloat(String.valueOf(ventanaCompra.getDetalleCompra().getValueAt(j, 3))));
		    		detallecompraDAO.registrarDetalleCompra(detallecompra);
		    		ingredienteDAO.actualizarInventario(String.valueOf(ventanaCompra.getDetalleCompra().getValueAt(j, 1)), Float.parseFloat(String.valueOf(ventanaCompra.getDetalleCompra().getValueAt(j, 3))));
		    		
			    }
		    	
		    	ventanaCompra.mostrarMensaje("La compra se ha registrado con exito");
		    	ventanaCompra.borrarDatos();
		    	}
			}catch(Exception e)
			{
				ventanaCompra.mostrarMensaje("No se pudo registrar la compra, verifique que los datos sean correctos");
				ventanaCompra.borrarDatos();
			}
		}

	
	private void buscarCompra(){
		if(ventanaCompra.getCodigo().equals(""))
			ventanaCompra.mostrarMensaje("Debe indicar el codigo de la compra");
		else{
			compra = compraDAO.buscarCompra(ventanaCompra.getCodigo());
		
			if(compra != null){
				ventanaCompra.mostrarMensaje("La compra se encuentra registrada!!!");
				ventanaCompra.setCodigo();
			}
			else
				ventanaCompra.mostrarMensaje("Puede continuar. La compra aun no ha sido Registrada");
		}
	}
	
	private void incluirCompra(){
			String codigocompra = ventanaCompra.getCodigo();
			String cantidad = ventanaCompra.getCantidad();
			String nombre = ventanaCompra.getNombreIngrediente();
			ingrediente = ingredienteDAO.buscarIngrediente(nombre);
			totalcompra+=ingrediente.getCosto()*Float.parseFloat(ventanaCompra.getCantidad());
			float monto =0;
			monto = ingrediente.getCosto()*Float.parseFloat(ventanaCompra.getCantidad());
			
			ventanaCompra.getDetalleCompra().incluir(codigocompra, ingrediente.getCodigoingrediente(), nombre, cantidad, String.valueOf(ingrediente.getCosto()), String.valueOf(monto));
			
			ventanaCompra.setTotal(String.valueOf(totalcompra));
	}
	
	private void removerDetalle(){
		totalcompra-=Float.parseFloat(String.valueOf(ventanaCompra.getDetalleCompra().getValueAt(ventanaCompra.seleccionDetalleCompra(), 5)));
		ventanaCompra.setTotal(String.valueOf(totalcompra));
		ventanaCompra.getDetalleCompra().remover(ventanaCompra.seleccionDetalleCompra());
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		String actionCommand = e.getActionCommand();
		if (actionCommand.equals("Buscar")) {
			buscarCompra();
		}		
		else if (actionCommand.equals("Aceptar")){
			incluirCompra();
		}
		else if (actionCommand.equals("Remover")){
			removerDetalle();
		}
		else if (actionCommand.equals("Guardar")){
			registrarCompra();
		}
		else if (actionCommand.equals("Cancelar")) {
			ventanaCompra.borrarDatos();
		}
		else if (actionCommand.equals("Salir")){
			this.ventanaCompra.setVisible(false);
		}
	}

}
